{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 新浪财经资讯"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:19:15.815802Z",
     "start_time": "2018-09-19T08:19:01.672810Z"
    }
   },
   "outputs": [],
   "source": [
    "import requests\n",
    "import time\n",
    "import csv\n",
    "import codecs\n",
    "import re\n",
    "import random\n",
    "from selenium import webdriver\n",
    "import pandas as pd\n",
    "from bs4 import BeautifulSoup\n",
    "from lxml import etree\n",
    "import scrapy\n",
    "from multiprocessing import cpu_count\n",
    "from multiprocessing import Process, Queue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:19:16.025804Z",
     "start_time": "2018-09-19T08:19:15.822804Z"
    }
   },
   "outputs": [],
   "source": [
    "stock_id = pd.read_csv(\"stock_id.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:19:16.042803Z",
     "start_time": "2018-09-19T08:19:16.033810Z"
    }
   },
   "outputs": [],
   "source": [
    "sz = stock_id[0: 1] #[0: 1384]\n",
    "#hs = stock_id[2045: 3402] #[2045: 3402]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 抓取深沪股市资讯列表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_url():\n",
    "    sz_url, hs_url = [], []\n",
    "    for i in range(0, len(sz)):\n",
    "        a = 'http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllNewsStock.php?symbol=sz' + sz.SecuCode[i]\n",
    "        sz_url.append(a)\n",
    "    for j in range(2045, 3402):\n",
    "        b = 'http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllNewsStock.php?symbol=hs' + hs.SecuCode[j]\n",
    "        sz_url.append(b)\n",
    "    return sz_url"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "GetUrls = get_url()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 只爬取深市(测试用)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:19:59.454958Z",
     "start_time": "2018-09-19T08:19:59.448960Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_sz_url():\n",
    "    sz_url, SecuCode_list = [], []\n",
    "    for i in range(0, len(sz)):\n",
    "        a = 'http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllNewsStock.php?symbol=sz' + sz.SecuCode[i]\n",
    "        sz_url.append(a)\n",
    "    return sz_url"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:20:00.442959Z",
     "start_time": "2018-09-19T08:20:00.436959Z"
    }
   },
   "outputs": [],
   "source": [
    "GetUrls = get_sz_url()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "GetUrls"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 只爬取沪市(测试用)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_hs_url():\n",
    "    hs_url = []\n",
    "    for j in range(2047, 3402):\n",
    "        b = 'http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllNewsStock.php?symbol=hs' + hs.SecuCode[j]\n",
    "        hs_url.append(b)\n",
    "    return hs_url,SecuCode_list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  获取Stock_id"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_id():\n",
    "    sz_list, hs_list = [], []\n",
    "    for i in range(0, len(sz)):\n",
    "        a = 'sz' + sz.SecuCode[i]\n",
    "        Sz_SecuCode = re.findall(\"(sz\\d\\d\\d\\d\\d\\d)\", a)\n",
    "        sz_list.append(Sz_SecuCode)\n",
    "    for j in range(2045, 3402):\n",
    "        b = 'hs' + hs.SecuCode[j]\n",
    "        Hs_SecuCode = re.findall(\"(hs\\d\\d\\d\\d\\d\\d)\", b)       \n",
    "        hs_list.append(Hs_SecuCode)\n",
    "    sz_list.extend(hs_list)\n",
    "    return sz_list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 获取深市StockID(测试用)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:20:07.365961Z",
     "start_time": "2018-09-19T08:20:07.357961Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_id():\n",
    "    sz_list, hs_list = [], []\n",
    "    for i in range(0, len(sz)):\n",
    "        a = 'sz' + sz.SecuCode[i]\n",
    "        Sz_SecuCode = re.findall(\"(sz\\d\\d\\d\\d\\d\\d)\", a)\n",
    "        sz_list.append(Sz_SecuCode)\n",
    "    return sz_list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": true
   },
   "source": [
    "### 获取沪市StockID(测试用)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 爬取新闻链接"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:20:44.674961Z",
     "start_time": "2018-09-19T08:20:44.310960Z"
    }
   },
   "outputs": [],
   "source": [
    "from Download import request\n",
    "def get_data_news_zhongxin():\n",
    "    news_list, URL_list = [], []\n",
    "    for i in range(0, len(GetUrls)):                             # 0 is first stock_id\n",
    "        Pages = GetUrls[i]\n",
    "        for j in range(0,1):                                     # catch page1 - 10 firstly，这里只抓了每个股的第一页\n",
    "            r = request.get(str(Pages) + '&Page=' + str(j), 3)\n",
    "            r.encoding='gb2312'\n",
    "            selector = etree.HTML(r.text)\n",
    "            infos = selector.xpath('//div[@class=\"datelist\"]')\n",
    "            for info in infos:\n",
    "                URL = info.xpath('//td/div[1]/ul/a/@href')\n",
    "                #print(URL)\n",
    "                URL_list.extend(URL)\n",
    "    return URL_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:20:45.816958Z",
     "start_time": "2018-09-19T08:20:45.704961Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "gdnz = get_data_news_zhongxin() ###所有的新闻链接"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:20:46.361957Z",
     "start_time": "2018-09-19T08:20:46.340965Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['http://finance.sina.com.cn/stock/s/2018-09-14/doc-ihkahyhw8150416.shtml',\n",
       " 'http://finance.sina.com.cn/chanjing/gsnews/2018-09-11/doc-ihiixyeu6288005.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-09-10/doc-ihivtsyk8575881.shtml',\n",
       " 'http://finance.sina.com.cn/chanjing/gsnews/2018-09-10/doc-ihivtsyk8131280.shtml',\n",
       " 'http://finance.sina.com.cn/chanjing/gsnews/2018-09-08/doc-ihivtsyi6893086.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-09-04/doc-ihiqtcap3371000.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-09-04/doc-ihiqtcan8351044.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-09-04/doc-ihiqtcan8059637.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-09-04/doc-ihiqtcan7724278.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-28/doc-ihifuvpi0153076.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-28/doc-ihifuvpi0104918.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-27/doc-ihifuvph3775430.shtml',\n",
       " 'http://finance.sina.com.cn/stock/gujiayidong/2018-08-24/doc-ihicsiaw3191805.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-24/doc-ihicsiaw3121896.shtml',\n",
       " 'http://finance.sina.com.cn/stock/gujiayidong/2018-08-24/doc-ihicsiaw2072623.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-24/doc-ihicsiaw2027530.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-23/doc-ihicsiav6266837.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-22/doc-ihhzsnec2188769.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-22/doc-ihhzsnec2329573.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-22/doc-ihhzsnec0647787.shtml',\n",
       " 'http://finance.sina.com.cn/chanjing/gsnews/2018-08-20/doc-ihhxaafy9369754.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-19/doc-ihhxaafy3484484.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-18/doc-ihhvciix0123652.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-17/doc-ihhvciiw3092353.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-17/doc-ihhvciiw2518447.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-17/doc-ihhvciiw2406918.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-16/doc-ihhvciiv9068870.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-16/doc-ihhvciiv8164151.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-16/doc-ihhvciiv7096151.shtml',\n",
       " 'http://finance.sina.com.cn/stock/jsy/2018-08-16/doc-ihhtfwqs0343821.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-16/doc-ihhtfwqs0246167.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-16/doc-ihhtfwqs0108893.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-16/doc-ihhtfwqr9548961.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-16/doc-ihhtfwqr9478736.shtml',\n",
       " 'http://finance.sina.com.cn/stock/s/2018-08-15/doc-ihhtfwqr9124771.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-15/doc-ihhtfwqr9168400.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-15/doc-ihhtfwqr8653818.shtml',\n",
       " 'http://finance.sina.com.cn/stock/ggzz/2018-08-15/doc-ihhtfwqr8287010.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-15/doc-ihhtfwqr8267017.shtml',\n",
       " 'http://finance.sina.com.cn/roll/2018-08-15/doc-ihhtfwqr8144422.shtml']"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gdnz"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 保存爬取的新闻链接至csv（方便以后爬取作去重）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:22:32.036142Z",
     "start_time": "2018-09-19T08:22:31.999146Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "###保存urls\n",
    "for i in range(0, len(gdnz)):\n",
    "    a = gdnz[i]\n",
    "    with open('sina_info_url.csv', 'a', newline='') as csvfile:\n",
    "        w = csv.writer(csvfile)\n",
    "        #print(w)\n",
    "        w.writerow([a]) ### 我就改了这个地方！！！！ 原本只能输出一行的， 现在终于可以一个一列了！"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 将文本与SrockID合并并输出"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 输出StockID至list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:24:57.533946Z",
     "start_time": "2018-09-19T08:24:57.527946Z"
    }
   },
   "outputs": [],
   "source": [
    "gsid = get_id()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:24:58.302948Z",
     "start_time": "2018-09-19T08:24:58.295948Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['sz000001']]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:24:59.231948Z",
     "start_time": "2018-09-19T08:24:59.224965Z"
    }
   },
   "outputs": [],
   "source": [
    "### \n",
    "def print_id():\n",
    "    id_list = []\n",
    "    nums = len(gdnz) // len(sz)\n",
    "    print(nums)\n",
    "    for i in range(0, len(get_id())):\n",
    "        for j in range(0, nums):\n",
    "            id_list.extend(gsid[i])\n",
    "    return id_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:25:00.031951Z",
     "start_time": "2018-09-19T08:25:00.021946Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "40\n"
     ]
    }
   ],
   "source": [
    "pid = print_id()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 输出文本并保存至csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:26:46.352463Z",
     "start_time": "2018-09-19T08:26:46.340466Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_data_news_content():\n",
    "    lists, InfoPublDate, InfoSource, InfoTitle, InfoContent = [], [], [], [], []\n",
    "    \n",
    "    for i in range(0, len(gdnz)):                                                                    #gdnz是要抓取的新闻链接\n",
    "        r_content = request.get(gdnz[i], 3)\n",
    "        r_content.encoding = 'utf-8'\n",
    "        selector = etree.HTML(r_content.text)\n",
    "        info_contents = selector.xpath(\"//div[@class='article']\")\n",
    "\n",
    "        for info in info_contents:\n",
    "            ###解析时间来员标题关键词文本\n",
    "            InfoPublDate = info.xpath('//div[@class=\"date-source\"]/span/text()')\n",
    "            InfoSource = info.xpath('//div[@class=\"date-source\"]/a/text()')\n",
    "            InfoTitle = info.xpath('//h1/text()')\n",
    "            InfoKeyword = info.xpath('//div[@id=\"article-bottom\"]/div[@class=\"keywords\"]/a/text()')\n",
    "            InfoContent = info.xpath('//div[@class=\"article\"]//p//text()')\n",
    "\n",
    "\n",
    "            InfoPublDate.extend(InfoSource)\n",
    "            InfoPublDate.extend(InfoTitle)\n",
    "            Join_Key = ' '.join(InfoKeyword)\n",
    "            InfoPublDate.append(Join_Key)\n",
    "            Join_Con = ''.join(InfoContent)\n",
    "            InfoPublDate.append(Join_Con)\n",
    "            InfoPublDate.extend([gdnz[i]])\n",
    "#             for j in range(3):\n",
    "#                 InfoPublDate[j] = InfoPublDate[j].replace(u'\\u3000',u'')\n",
    "\n",
    "            ###文本合并StockID\n",
    "            \n",
    "            InfoPublDate.append(pid[i])\n",
    "            \n",
    "            with open('news_sina_2.csv', 'a+', encoding='utf-8-sig', newline='') as csvfile:\n",
    "                w = csv.writer(csvfile, dialect='excel')\n",
    "                w.writerow(InfoPublDate)        \n",
    "    return InfoPublDate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:28:30.638457Z",
     "start_time": "2018-09-19T08:28:23.080288Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "gdnc = get_data_news_content()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 保存csv至Mysql"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T08:46:48.764187Z",
     "start_time": "2018-09-19T08:46:48.532182Z"
    }
   },
   "outputs": [],
   "source": [
    "import MySQLdb\n",
    "import pymysql\n",
    "import codecs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-19T09:20:39.957557Z",
     "start_time": "2018-09-19T09:20:39.939558Z"
    }
   },
   "outputs": [],
   "source": [
    "csv = pd.read_csv('news_sina_2.csv', header=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T05:59:13.974345Z",
     "start_time": "2018-09-20T05:59:13.969344Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018年09月11日 21:17\n"
     ]
    }
   ],
   "source": [
    "print(csv[0][1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T06:02:21.845061Z",
     "start_time": "2018-09-20T06:02:21.230063Z"
    }
   },
   "outputs": [],
   "source": [
    "conn = MySQLdb.connect(host='localhost', user='root', passwd='231111', db='mysql', charset='utf8')\n",
    "cur = conn.cursor()\n",
    "for i in range(0, len(gdnz)):\n",
    "    try:\n",
    "        cur.execute(\"insert into sinainfo(InfoPublDate,InfoSource, InfoTitle, InfoKeyword, InfoContent, Url, StockID) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s')\" % (csv[0][i], csv[1][i], csv[2][i], csv[3][i], csv[4][i], csv[5][i], csv[6][i]))\n",
    "        #stockid = cur.execute(\"insert into sinainfo() values ()\" % )\n",
    "        #print('date:', date)\n",
    "        conn.commit()\n",
    "    except Exception as e:\n",
    "        #print(e)\n",
    "        conn.rollback()\n",
    "\n",
    "cur.close()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 去重"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T02:41:29.055358Z",
     "start_time": "2018-09-20T02:41:29.031330Z"
    }
   },
   "outputs": [],
   "source": [
    "def distinct():\n",
    "    conn = MySQLdb.connect(host='localhost', user='root', passwd='231111', db='mysql', charset='utf8')\n",
    "    cur = conn.cursor()\n",
    "    sql_groupby = \"DELETE from sinainfo where InfoPublDate NOT IN                                      \\\n",
    "                    (                                                                                  \\\n",
    "                        SELECT s.InfoPublDate from                                                     \\\n",
    "                            (                                                                          \\\n",
    "                            SELECT InfoPublDate from sinainfo where InfoPublDate GROUP BY InfoPublDate \\\n",
    "                        )AS s                                                                          \\\n",
    "                    )\"\n",
    "    try:\n",
    "        cur.execute(sql_groupby)\n",
    "        conn.commit()\n",
    "        date = cur.fetchall()\n",
    "        print('date:',date[4])\n",
    "        \n",
    "    except Exception as e:\n",
    "        print('e:',e)\n",
    "        conn.rollback()\n",
    "cur.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T02:41:30.385859Z",
     "start_time": "2018-09-20T02:41:30.364860Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "e: (1292, \"Truncated incorrect INTEGER value: '2018年09月14日 07:21'\")\n"
     ]
    }
   ],
   "source": [
    "distinct()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
